package fun.cyhgraph.handler;

import fun.cyhgraph.constant.MessageConstant;
import fun.cyhgraph.exception.BaseException;
import fun.cyhgraph.result.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.sql.SQLIntegrityConstraintViolationException;

/**
 * 全局异常处理器，能对项目中抛出的异常进行捕获和处理
 */
@RestControllerAdvice  // 表示当前类是一个全局异常处理器
@Slf4j
public class GlobalExceptionHandler {

    /**
     * 捕获业务异常
     * @param ex
     * @return
     */
    @ExceptionHandler
    public Result excepitonHandler(BaseException ex){
        log.info("异常信息：{}", ex.getMessage());
        return Result.error(ex.getMessage());
    }

    /**
     * 员工用户名重复问题解决
     * 重写exceptionHandler   自定义异常处理 用户名重复
     * 处理sql异常
     */
    @ExceptionHandler
    public Result exceptionHandler(SQLIntegrityConstraintViolationException ex){
        String message = ex.getMessage();  //  获取异常信息放入message中
        //报错信息：Duplicate entry 'zhangsan' for key 'employee.idx_username'
        if (message.contains("Duplicate entry")){   //  判断错误信息中是否包含Duplicate entry
            //我们想要的名字在第三位，所以建立一个数组来接收错误信息
            String[] split = message.split(" ");  //  把字符串按空格进行分割
            String username = split[2];   //数组第三个为名字
            String msg = username + MessageConstant.ALREADY_EXiST; // 用户名已存在
            return Result.error(msg); // 返回错误信息
        }else {
            return Result.error(MessageConstant.UNKNOWN_ERROR); //  未知错误
        }
    }
}
